const powerSet = arr => {
  // 初始化结果数组，用于存储所有子集
  const result = []

  // 数组长度，用于计算循环次数
  const n = arr.length

  // 总共有2^n - 1个非空子集（每个元素有选或不选两种可能，减去全不选的情况）
  for (let i = 1; i < 1 << n; i++) {
    const subset = []

    // 检查每一位是否为1，如果是则将对应元素加入子集
    for (let j = 0; j < n; j++) {
      // 检查第j位是否为1
      if (i & (1 << j)) {
        subset.push(arr[j])
      }
    }

    result.push(subset)
  }

  return result
}
export default powerSet
